

var obj = function (id) {
	return "string" == typeof id ? document.getElementById(id) : id; 
}; 
var Class = { 
	create: function() { 
		return function() { 
		this.initialize.apply(this, arguments); 
		} 
	} 
};
Object.extend = function(destination, source) { 
	for (var property in source) { 
		destination[property] = source[property]; 
	} 
	return destination; 
};
function addEventHandler(oTarget, sEventType, fnHandler) { 
	if (oTarget.addEventListener) { 
		oTarget.addEventListener(sEventType, fnHandler, false); 
	} else if (oTarget.attachEvent) { 
		oTarget.attachEvent("on" + sEventType, fnHandler); 
	} else { 
		oTarget["on" + sEventType] = fnHandler; 
	} 
}; 
var Scroller = Class.create(); 
Scroller.prototype = { 
	initialize: function(idScroller, idScrollMid, options) { 
		var oThis = this, oScroller = obj(idScroller), oScrollMid = obj(idScrollMid); 
		this.SetOptions(options); 
		this.Side = this.options.Side || ["up"];//方向 
		this.scroller = oScroller; //对象 
		this.speed = this.options.Speed; //速度 
		this.timer = null; //时间 
		this.pauseHeight = 0; //定高 
		this.pauseWidth = 0; //定宽 
		this.pause = 0; //定高(宽) 
		this.side = 0; //参数 
		//用于上下滚动 
		this.heightScroller = parseInt(oScroller.style.height) || oScroller.offsetHeight; 
		this.heightList = oScrollMid.offsetHeight; 
		oScroller.style.overflow = "hidden"; 
		oScrollMid.appendChild(oScrollMid.cloneNode(true)); 
		oScrollMid.appendChild(oScrollMid.cloneNode(true)); 
		addEventHandler(oScroller, "mouseover", function() { oThis.Stop(); }); 
		addEventHandler(oScroller, "mouseout", function() { oThis.Start(); }); 
		this.Start(); 
	}, 
	//设置默认属性 
	SetOptions: function(options) { 
		this.options = {//默认值 
			Step: 1,//每次变化的px量 
			Speed: 20,//速度(越大越慢) 
			Side: ["up"],//滚动方向:"up"是上，"down"是下，"left"是左，"right"是右 
			PauseHeight: 0,//隔多高停一次 
			PauseWidth: 0,//隔多宽停一次 
			//当上下和左右一起使用时必须设置PauseHeight和PauseWidth来设置转向位置 
			PauseStep: 3000//停顿时间(PauseHeight或PauseWidth大于0该参数才有效) 
		}; 
		Object.extend(this.options, options || {}); 
	}, 
	//转向 
	Turn: function() { 
	//通过设置方向数组的排列来转向 
		this.Side.push(this.Side.shift().toLowerCase()); 
	}, 
	//上下滚动 
	ScrollUpDown: function() { 
		this.pause = this.pauseHeight; 
		this.scroller.scrollTop = this.GetScroll(this.scroller.scrollTop, this.heightScroller, this.heightList, 
		this.options.PauseHeight); 
		this.pauseHeight = this.pause; 
		var oThis = this; 
		this.timer = window.setTimeout(function(){ oThis.Start(); }, this.speed); 
	}, 
	//获取设置滚动数据 
	GetScroll: function(iScroll, iScroller, iList, iPause) { 
		var iStep = this.options.Step * this.side; 
		if(this.side > 0){ 
			if(iScroll >= (iList * 2 - iScroller)){ iScroll -= iList; } 
		} else { 
			if(iScroll <= 0){ iScroll += iList; } 
		} 
		this.speed = this.options.Speed; 
		if(iPause > 0){ 
			if(Math.abs(this.pause) >= iPause){ 
				this.speed = this.options.PauseStep; this.pause = iStep = 0; this.Turn(); 
			} else { 
				this.pause += iStep; 
			} 
		} 
		return (iScroll + iStep); 
	}, 
	//开始 
	Start: function() { 
	//方向设置 
		switch (this.Side[0].toLowerCase()) { 
			case "down" : 
			if(this.heightList < this.heightScroller) return; 
			this.side = -1; 
			this.ScrollUpDown(); 
			break; 
			case "up" : 
			default : 
			if(this.heightList < this.heightScroller) return; 
			this.side = 1; 
			this.ScrollUpDown(); 
		} 
	}, 
	//停止 
	Stop: function() { 
		clearTimeout(this.timer); 
	} 
};